シングルサインオンで認証するAlteryx ServerをSSL化してALB経由でアクセスしてみた
シングルサインオンのAlteryx ServerをSSL化し、なおかつALB(Application Load Balancer)経由でアクセスできる環境を作成してみました。ALBを使えばACM(AWS Certificate Manager)でSSL証明書を無償で取得できて嬉しい限りです。ちょっとクールな文体で書いてますが結構苦労したのでしみじみした気持ちでブログを書いています。
前提
本エントリの検証に当たって使用した環境は以下の通りです。
- Alteryx Server 2019.3
- Windows Server 2012 Standard R2 on AWS EC2
- OneLogin
また、以下条件を満たしていることが前提となります。
- Alteryx ServerをインストールしたEC2インスタンスを用意済み
- 外部アクセス用ドメインをすでに取得済み
- 外部アクセス用ドメインの証明書をACMで発行済み
構成図
構成図は以下の通り。
この構成のポイントは以下の通りです。
- 外部からALBへのアクセスだけでなく、ALBからバックエンドEC2(Alteryx Server)への通信にもhttpsを使用
- ALBからEC2(Alteryx Server)へのヘルスチェックには、IISで作成したWebサイトを参照
どうしてALBとAlteryx Server間のアクセスはHTTP(TCP:80)じゃダメなの?
ALB経由でEC2にアクセスする構成は、
- 外部からALBへのアクセスはHTTPS(TCP:443)
- ALBからEC2間のアクセスはHTTP(TCP:80)
とするのが一般的です。しかしAlteryx Serverの場合、外部からのhttpsアクセスとシングルサインオンを両立させるにはEC2のSSL化が必須となります。
認証方式にシングルサインオンを採用する場合、Alteryx ServerのSystem Settingsで設定するBase Address(http(s)://[Alteryx ServerのFQDN名]/gallery
)は、ユーザーがALB経由でアクセスする時のURLを記載する必要があります。今回の場合、ユーザーはhttpsで始まるURLにアクセスする想定です。Base Addressにhttps始まりのURLを指定する場合、Alteryx ServerのSSL化が必須となります。なお、Base Addressが外部からアクセスするURLと一致しない場合、クライアント側からのログインに失敗してしまいます。
Alteryx Serverにシングルサインオンでログインするためには何が必要?
シングルサインオン認証させるために必要となる条件は以下の通り。
- Alteryx ServerのSystem Settings>[Gallery Authentication]>[Verify IDP]ボタンをクリックしてIdPとの連携に成功している
- System Settingsをすべて完了し、Alteryx Service.exeがRunningのステータスとなる
[Verify IDP]ボタンをクリックした場合、Alteryx ServerはIDP URL / IDP SSO URLにアクセスを行い、IdP側も登録されたSAML認証用URLへアクセスを行います。この時、Alteryx Serverが自己署名証明書でSSL化されていると認証に失敗します。ACMの証明書やLet's Encryptなどの正規の証明書であれば成功します。
いずれもhttp環境での検証になりますが、シングルサインオン環境の構築自体の手順は以下のエントリをご参照ください。
どうしてIISを使うの?
構成図にもある通り、ALBのヘルスチェックはIISへアクセスさせるようにしています。これは、AlteryxServerのSystem Settingsの特性上、Alteryx Server単体ではALB配下にEC2を配置できないためです。
ALBはヘルスチェックという機能があり、チェックが通って初めてALB配下にEC2を配置します。一般的にはALB経由でアクセスしたいアプリケーションに対して規定の回数アクセスが成功することでALB配下にEC2を配置します。今回のようにSSL化+シングルサインオンを実現させたいケースでは、ヘルスチェックパスにAlteryx ServerのURLを指定するとVerify IDPが通らなくなります。理由は以下の通りです。
- Alteryx Serverが立ち上がるためにはVerify IDPでIdPとの連携が成功している必要がある
- Verify IDPを処理させるためにはALB配下にAlteryx Serverを置く必要がある
そこで、ヘルスチェックをIISに受けさせることでまずはALB配下にEC2を配置させます。そうするとVerify IDPの処理はACMで作成した証明書が適用された状態で通り、エラーとならずに連携に成功します。
ターゲットグループ作成
前置きが長くなってしまいましたが、Alteryx Server用のターゲットグループを作成しましょう。
プロトコルにはHTTPSを指定します。ヘルスチェックパスにはIISのパスを記載します。今回は/health_check
と記載しています。
ターゲットタブの編集ボタンよりAlteryx Serverを追加します。
追加された時点ではステータスはunusedとなっています。
ALB作成
ロードバランサーの種類は「Application Load Balancer」を指定します。
ロードバランサーのプロトコルにはHTTPSを指定します。
2つ以上のアベイラビリティゾーンにサブネットを指定します。
ACMで取得した証明書を選択します。
適用したいセキュリティグループを選択します。
「既存のターゲットグループ」を選択し、先ほど作成したターゲットグループを指定します。
ターゲットが登録されていることが確認できます。最後に設定項目を確認してALBを作成します。
IIS設定
Alteryx ServerをSSL化してALBのヘルスチェックを受けるためのWebサイトを立ち上げるためにIISを使用します。 IISとARRのインストールについては以下の記事を参考にしました。
ARRの構成
後述するURL書き換えを実施するため、Application Request Routing(ARR)の設定を行います。「Application Request Routing Cashe」を選択します。
「Server Proxy Settings」を選択します。
「Enable Proxy」にチェックを入れます。
URL書き換え
ALBのヘルスチェックを受けるためのカスタムレスポンスを作成しましょう。「URL Rewrite」を選択します。
右上の「Add Rules」を選択します。
テンプレートは「Blank Rule」を選択します。
PatternsにはALBで指定したヘルスチェックパスを指定します。今回は/health_check
を使用しています。
Actionsは「Custom Response」を指定し、このURLにアクセスされた際には常にステータスコード:200を返すように指定します。
自己証明書の作成
最後にIISで自己署名証明書を作成し、Webサイトにバインドします。「Server Certificates」を選択します。
「Create Self-Signed Certificate」を選択します。
任意の名前をつけてOKを押します。これで自己署名証明書が作成されました。
次にWebサイトにバインドします。右側メニューから「Bidings」を選択します。
「Add」を選択します。
Typeには「https」を指定し、先ほど作成した自己署名証明書をドロップダウンリストから選択してOKを押します。これでバインドは完了です。
Alteryx Serverの設定
最後にAlteryx Serverの接続設定をします。今回はSAML認証のIdPにOneLoginを使用しています。OneLoginとAlteryx Serverとの連携方法の詳細は以下エントリをご参照ください。
Alteryx ServerでSAML認証を試す〜OneLogin編〜 | DevelopersIO
OneLoginのConfigurationタブでは、ALB経由のURLを記載しておきます。
Base Addressにはクライアント端末からアクセスするALB経由のアドレスを指定し、Enable SSLにチェックを入れておきます。
認証方式は「SAML Authentication」を選択し、各項目を埋めます。これらの項目はOneLoginのアプリケーションページよりSSOタブに記載された内容から取得可能です。
「Verify IDP」を押すとOneLoginのログイン画面が出ます。ここでログインしたユーザがAlteryx ServerのCurator(Administratorユーザー)となります。
動作確認
設定完了後、httpsでZone ApexにリクエストをするとGalleryの画面が表示されました。
SIGN INを押すとOneLoginのログイン画面が表示されました。
おわりに
Alteryx ServerをSSL化する手順やSAML認証をさせる手順は見つけられたものの、この二つを両立させている手順に出会えず、ハマりにハマって心がボキボキに折れ、様々な人を巻き込んでIISを使う形に落ち着きました。(ありがたい職場環境です…)同じ様な悩みを抱える方のお役に立てば幸いです!
参考記事
- 無料ドメイン(.tk)とRoute53を利用して0円でHTTPS環境を設定してみた | DevelopersIO
- ALBとバックエンドEC2間をHTTPS通信させてみた | DevelopersIO
- Application Request Routing(ARR)を使ったRedmineの設定について - しばたテックブログ
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。